package arithmetic2.day09;

/*
    布隆过滤器的位图
 */
public class BitMap {
    //整型数组的长度
    public int size;

    //使用长度为10的整型数组来表示长度为320的bit[](一个整型有32位)
    public int[] bitMap;

    public BitMap(int size) {
        this.size = size;
        this.bitMap = new int[this.size];
    }

    /*
            取得bitMap上某一位的状态
         */
    public int getIndex(int index) {
        //得到这一位数在整数数组中的索引
        int intIndex = index / 32;
        //得到在该索引上的具体位
        int digit = index % 32;
        //返回这一位的状态
        return (bitMap[intIndex] >> digit) & 1;
    }

    /*
        将bitMap上某一位的状态改成1
     */
    public void modifyIndexOne(int index) {
        //得到这一位数在整数数组中的索引
        int intIndex = index / 32;
        //得到在该索引上的具体位
        int digit = index % 32;
        //修改
        bitMap[intIndex] = bitMap[intIndex] | (1 << digit);
    }

    /*
        将bitMap上某一位的状态改成0
     */
    public void modifyIndexZero(int index) {
        int intIndex = index / 32;
        int digit = index % 32;
        //修改
        bitMap[intIndex] = bitMap[intIndex] & ~(1 << digit);
    }
}
